/*
 函数索引
@function initPage 初始化DOM
@function getSelectList  返回列表，渲染为下拉菜单
@function getGradeList  获取年级列表
@function GradeListEvent  监听年级列表change事件
@function loadTable  获取科组列表，根据各种条件渲染表格
@function initTable  初始化表格（头部科组，行班级）
@function createThead   渲染科目表头
@function createTbody   获取班级列表,并渲染行
@function createClassTd   渲染班级序号
@function getTeacher   获取教职工列表
@function createMulSelect  渲染多功能下拉菜单
@function personalData   获取老师绑定的班级，年级，科目id数据
@function savePosition   新增和更新
@function showPositionTable   获取定位表
@function teacherEvent  监听老师列表下拉框切换事件

 * */
;(function($, window, document, undefined) {
	var aCG = [],//科组
		aClassList = [];//班级
		
	$.extend({
		//初始化所有方法
		initPage:function(){
			
			//获取年级列表
			$.getGradeList();
			
			//获取科目表
			$.getClassGroupList();
//			
//			//将科目渲染在表头
//			$.createThead(aCG);
			
			
			
			//初始化表格
//			$.loadTable();
			
			//监听保存定位表
			$.savePosition();
						
			//监听年级列表change事件
			$.GradeListEvent();
			
			//监听教职工下拉菜单切换事件
			$.teacherEvent();
			
			//查看定位表
//			$.showPositionTable($("#grade").val());
			
		},
		/*
		 返回列表，渲染为下拉菜单
		 @param aData {array} 列表数据
		 @param container {object} 下拉菜单select元素对象界节点  jq
		 * */
		getSelectList:function(aData,container){
			container.find("option").remove();
			$.each(aData, function(i,v) {
				var sOption = '<option value="'+ v.id +'">'+ v.name +'</option>';
				container.append($(sOption));
			});
		},
		//获取年级列表
		getGradeList:function(){
			fnAjax.method_4(
				url_join("grade/list"),
				{},
				"post",
				function(data) {
					console.log(data);
					if(data.data.length > 0){
						$("#grade").find("option").remove();
						$.each(data.data, function(i,v) {
							if(v.type == 0){
								var sOption = '<option value="'+ v.id +'" data-type="'+ v.type +'">'+ v.name +'</option>';
							}
							$("#grade").append($(sOption));
						});
						//获取班级列表
						$.getClassList();
					}
					else{
						layer.alert("该学校还没初始化年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建年级数据！");
					}
					
				}
			);
		},
		//监听年级列表change事件
		GradeListEvent:function(){
			$("#grade").on("change",function(){

				
				//获取班级列表，创建班级单元以及主要单元格子，创建教职工列表下拉菜单，单元格添加绑定班级科组id，查看
				$.getClassList();
					
	//			//创建班级单元以及主要单元格子
	//			$.createClassTd(aClassList);
	//			
	//			//创建教职工列表下拉菜单
	//			$.getTeacher();
	//					
	//			//单元格添加绑定班级科组id
	//			$.addProp();
					
	//			//查看
	//			$.showPositionTable($("#grade").val());
			});
		},		
		//获取科目表
		getClassGroupList: function() {
			fnAjax.method_4(
				url_join("class-group/list"), {},
				"post",
				function(data) {
					console.log(data);
					aCG = data.data;
					
					//将科目渲染在表头
					$.createThead(aCG);
				}
			);
		},

	
		/*
		 渲染科目表头
		 @param aData {array} 科组数据
		 * */
		createThead:function(aData){
			console.log(aData);
			if(aData.length == 0){
				layer.alert("该年级还没初始化科组数据，请到“资料管理》学校内部架构管理》科组列表” 模块，创建科组数据！");
				return false;
			}
			$(".classGroupTh").remove();
			var sTh = "";
			$.each(aData, function(i,v) {
				sTh += '<th class="classGroupTh" data-id="'+ v.id +'"><span class="classGroupSpan">'+ v.name +'</span></th>';
			});
			$("thead th:nth-child(2)").after($(sTh));
		},

		
		//获取班级列表
		getClassList:function(){
			fnAjax.method_4(
				url_join("class/list"),
				{grade_id:$("#grade").val()},
				"post",
				function(data) {
					console.log("班级",data.data);
					aClassList = data.data;
					//创建班级单元以及主要单元格子
					$.createClassTd(aClassList);
					
				}
			);
		},
		/*
		 渲染班级序号
		 @param data {array} 班级列表		
		 * */
		createClassTd:function(data){
			$("tbody tr").remove();
			if(data.length == 0){
				layer.alert("该年级还没有初始化班级数据，请到“资料管理》学校内部架构管理》班级列表” 模块，创建班级数据！");	
				return false;
			}
			var thLength = ($("thead th").length) - 1;
			var tds = "";
			for(var k=0;k<thLength;k++){
				tds += '<td class="teacherTd"><select class="teacherList form-control show-tick" style="width:130px;margin: 0 auto;"></select></td>';
			}
			
			$.each(data, function(i,v) {
				var sTd = '<tr class="text-c" data-class-id="'+ v.id +'"><td class="classTd" data-id="'+ v.id +'">'+ v.name +'</td>'+ tds +'</tr>';
				$("tbody").append($(sTd));
			});
			
			//创建教职工列表下拉菜单
			$.getTeacher();
		},
		//获取教职工列表
		getTeacher:function(){	
			fnAjax.method_4(
				url_join("course/staff"),
				{},
				"post",
				function(data){
					console.log(data);
					$(".teacherList").each(function(){
						$.createMulSelect(data.data,$(this));
					});
					//单元格添加绑定班级科组id
					$.addProp();
				}
			);
			$(".gradeLabel").text($("#grade").find("option:selected").text());
			
		},
		//单元格添加绑定班级科组id
		addProp:function(){
			$(".teacherTd").each(function(){
				$(this).attr({
					"data-class":$(this).siblings(".classTd").attr("data-id"),
					"data-class-group":$("#table th").eq($(this).index()).attr("data-id")
				});
			});
			
			//查看
			$.showPositionTable($("#grade").val());
		},
		/*
		 渲染多功能下拉菜单
		@data {array} 主要数据
		@param container {object} 下拉菜单select元素对象界节点  jq
		 * */
		createMulSelect:function(data,container){
			container.html("");
			container.append($('<option value="0">请选择教职工</option>'));
			$.each(data, function(i,v) {
				var optgroup = '<optgroup label="'+ v.name +'"  data-id="'+ v.id +'">'+
					           		createOption(v.staff) +
					           '</optgroup>';
				container.append($(optgroup));
			});
			layer.close(layerLoad);
			/*
			 创建option
			 @param {array} arr staff数组
			 @return {string} 
			 * */
			function createOption(arr){
				var options = "";
				$.each(arr, function(k,e) {
					options += '<option value="'+ e.id +'" style="font-weight: normal;color: blue;">'+ e.username +'</option>';
				});
				return options;
			}
		},
		
		
		/*
		 获取老师绑定的班级，年级，科目id数据
		 @param {object} conatiner td的DOM对象（jq）
		 * */
		personalData:function(conatiner){
			var aTeacher= [];
			if($(".btn-save").attr("data-type") == "update"){
				conatiner.each(function(i,v){
					$(this).find("option:selected").attr("selected","selected");
					aTeacher.push({
						id:$(this).attr("data-id"),
						person_id:$(this).find("option:selected").attr("value"),//教职工id
						person_name:$(this).find("option:selected").text(),//教职工名字
						class_id:$(this).parent("tr").attr("data-class-id"),//班级id
						class_name:$(this).parent("tr").children("td:first-child").text(),//班级名称
						class_group_id:$("#table th").eq($(this).index()).attr("data-id"),//科目id
						class_group_name:$("#table th").eq($(this).index()).text()//科目名称
					});
				});
			}
			else{
				conatiner.each(function(i,v){
					$(this).find("option:selected").attr("selected","selected");
					aTeacher.push({
						person_id:$(this).find("option:selected").attr("value"),//教职工id
						person_name:$(this).find("option:selected").text(),//教职工名字
						class_id:$(this).parent("tr").attr("data-class-id"),//班级id
						class_name:$(this).parent("tr").children("td:first-child").text(),//班级名称
						class_group_id:$("#table th").eq($(this).index()).attr("data-id"),//科目id
						class_group_name:$("#table th").eq($(this).index()).text()//科目名称
					});
				});
			}
			console.log("提交的主要数据：",aTeacher);
			return aTeacher;
		},
		//新增和更新
		savePosition:function(){
			$(".btn-save").on("click",function(){
				//保存到后台的定位表格html片段
				var sHtml = $(".tableBox").html();
				//添加定位表
				if($(this).attr("data-type") == "create"){
					var oData = {
						gid:$("#grade").val(),//年级id
//						content:sHtml,//表格html片段
						course_v1:$.personalData($(".teacherTd")),//主要提交数据
					};
					fnAjax.method_4(
						url_join("course-v1/create"),
						oData,
						"post",
						function(data){
							layer.msg("操作成功",{time:1000},function(){
								window.location.reload();
							});
							
						}
					);
				}
				//更新定位表
				else{
					var oData = {
						gid:$("#grade").val(),//年级id
//						content:sHtml,//表格html片段
						course_v1:$.personalData($(".changeTd")),//主要提交数据
					};
					fnAjax.method_4(
						url_join("course-v1/update"),
						oData,
						"post",
						function(data){
							layer.msg("操作成功",{time:1000},function(){
								window.location.reload();
							});
						}
					);
				}
			});
		},

		
		/*
		 * 获取定位表
		 @param {number} gid 
		 * */
		showPositionTable:function(gid){
			if($("#grade").children("option").length == 0){
				layer.alert("该学校还没初始化年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建年级数据！");
				return false;
			}
			fnAjax.method_4(
				url_join("course-v1/show"),
				{"gid":gid},
				"post",
				function(data){
					console.log(data);
					if(data.data.length > 0){
						//回显查询定位表的数据
						$.back_show_table(data.data);
						
						$(".btn-save").attr("data-type","update");
					}
					else{
						$(".btn-save").attr("data-type","create");
					}
					//调用插件select
					$.selectPlugIn($(".teacherList"));
					
					//控制长度过长的表格左右平移显示的插件
					$.better_show_tables(				
						$("#table"),
						$(".btn-toLeft"),
						$(".btn-toRight")
					);
					
					//监听科目下拉框
					$.classGroupSelectEvent();
				}
			);
		},		
		
		//监听老师列表下拉框切换事件
		teacherEvent:function(){
			$("body").on("change",".teacherList",function(){
				$(this).find("option:selected").attr("selected","selected");
			});
		},
		//监听科目下拉框
		classGroupSelectEvent:function(){
			$(".teacherList").each(function(){
				$(this).attr("data-init",$(this).val());
			});
			$("body").on("change",".teacherList",function(){
				$(this).find("option:selected").attr("selected","selected");
				if($(this).find("option:selected").attr("value") == $(this).attr("data-init")){
					$(this).parents("td").removeClass("changeTd");
				}else{
					$(this).parents("td").addClass("changeTd");
				}
			});
		},
		//回显查询定位表的数据
		back_show_table:function(aData){
			$.each(aData, function(i,v) {
				$(".teacherTd").each(function(){
					if($(this).attr("data-class") == v.class_id && $(this).attr("data-class-group") == v.class_group_id){
						$(this).attr("data-id",v.id).find("select").val(v.staff_id);
					}
				});
			});
		},
		//调用插件select
		selectPlugIn:function(selector){
			selector.attr({
				"data-live-search":true,
				"data-live-search-placeholder":"Search",
				"data-actions-box":true
			});
			selector.selectpicker({});
			
			//判断select是否有教职工数据
			$(".teacherList").each(function(){
				if($(this).find("option").length == 1){
					layer.alert("该学校还没有初始化教职工数据，请到“资料管理》教职工管理” 模块，创建教职工数据！");
				}
			});
			

		},
	
		/**
		 * 控制长度过长的表格左右平移显示的插件
		 * @param {Object} oTable 主要表格选择器jq
		 * @param {Object} oLeftBtn 操作表格左平移的选择器按钮
		 * @param {Object} oRightBtn 操作表格右平移的选择器按钮
		 * */
		better_show_tables:function(oTable,oLeftBtn,oRightBtn){
			var nBodyWidth = $("body").width();
			var nTableWidth = oTable.width();
			var maxLeft = nTableWidth - nBodyWidth;//最大
			var nSpeed = maxLeft/5;//速度
			var minLeft = 0;//最小
			//初始化表格位置		
			oTable.css({
				"position":"absolute",				
				"left":minLeft
			});
			//向左平移
			oLeftBtn.on("click",function(){
				if(oTable.position().left > (-maxLeft - 20)){
					oTable.animate({left:"-="+ nSpeed +"px"},100);
					
					oLeftBtn.attr("disabled","disabled");
					var timer = setTimeout(function(){
						oLeftBtn.removeAttr("disabled");
						clearTimeout(timer);
					},100);
				}
				else{
					layer.msg("到头啦");
				}
			});
			//向右平移
			oRightBtn.on("click",function(){
				if(oTable.position().left < minLeft ){
					oTable.animate({left:"+="+ nSpeed +"px"},100);
					
					oRightBtn.attr("disabled","disabled");
					var timer = setTimeout(function(){
						oRightBtn.removeAttr("disabled");
						clearTimeout(timer);
					},100);
				}else{
					layer.msg("到头啦");
				}
			});
		}
	});
})(jQuery, window, document);